package com.deng.springboot.demo.web;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.transaction.annotation.EnableTransactionManagement;

/**
 * @author 邓力宾
 * @date 2020/3/1015:35
 * @Description: 启动类
 */
@SpringBootApplication // = @Configuration + @EnableAutoConfiguration + @ComponentScan。
@EnableTransactionManagement
@EnableAspectJAutoProxy
public class WebApplication {

    public static void main(String[] args) {
        SpringApplication.run(WebApplication.class); //运行，参数会被作为一个配置类放入到一个Class的数组中，最中放入到Set<Class>中
    }
}

/*
* @Configuration注解:配置该注解的类称为一个全配置类，通常和@Bean注解方法一起使用。@Bean注解的方法返回的对象会交给spring容器管理。
*  如果一个类上没有@Configuration，而方法上有@Bean注解(通常不建议这么做)，spring将不能处理@Bean创建的实例的依赖关系，
*  而且每次获取bean都会调用@Bean方法创建一个新bean返回。
*
*@EnableAutoConfiguration注解:启用自动装配，导入了一个核心类:AutoConfigurationImportSelector(这是一个特殊的类，它是spring的一个拓展点)
*AutoConfigurationImportSelector通过 SpringFactoriesLoader.loadFactoryNames()
 把 META-INF/spring.factories文件中 org.springframework.boot.autoconfigure.EnableAutoConfiguration 这个key对应类作为配置类
 *
**/
